People involved

  • Chol Mabil
  • Emile Jorgensen
  • Peter Ruestow
  • V. Eloesa McSorley

Roadmap

  • Context
  • MetaRVM modeling framework
    • Metapopulation structure
    • Disease progression model
    • Mixing matrices from a synthetic population
  • Implementation as an R package
  • Case study: influenza in Chicago

Motivation

  • Public health decision makers increasingly rely on epidemiological models to:
    • Forecast likely futures
    • Stress-test interventions
    • Plan resource allocation (e.g., beds, staffing)

Motivation

Population-based ODE model

  • Aggregate-level dynamics
  • Homogeneous mixing assumptions
  • Computationally light and fast

Agent-based model

  • Individual-level interactions
  • Heterogeneous contact network
  • Expensive to run for large population

Motivation

Population-based ODE model

  • Aggregate-level dynamics
  • Homogeneous mixing assumptions

Meta-population hybrid model

MetaRVM

  • Stratified metapopulation structure
  • Time-varying mixing between strata

Agent-based model

  • Individual-level interactions
  • Heterogeneous contact network

MetaRVM

  • An open-source R package for modeling infectious disease spread across stratified subpopulations.
  • Subpopulations can be defined by:
    • Geography (e.g., neighborhood, ZIP, zone)
    • Demographics (e.g., age, race/ethnicity)
  • Features:
    • Time varying mixing pattern (weekday vs weekend, day vs night)
    • Extended SEIR-type disease progression
    • Checkpointing/restart functionality

MetaRVM - Disease model

MetaRVM - Population mixing

  • Allows for subpopulations based on demographic characteristics, e.g., based on age: children (green boxes), working-age adults (blue boxes), and seniors (orange boxes)
  • Allows for different mixing patterns for daytime and nighttime: obtained through social mixing studies or through synthetic population schedules

Mixing and force of infection

  • For each stratum, the force of infection depends on:
    • Mixing rates between the stratum \(i\) and \(j\) \(M = (m_{ij}), \quad, i, j \in \mathcal{J}\) (set of all strata)
    • Prevalence of infectious individuals in \(j\)th stratum at time \(t\), \(I_t^{(j)}\), where \(j \in \mathcal{J}\)

Mixing and force of infection

  • Effective interacting population (exclude Hospitalized [H], Dead [D] from total Population [P])

\[ \mathrm{MP}_t^{(j)} = P_t^{(j)} - H_t^{(j)} - D_t^{(j)}, \qquad j \in \mathcal{J}. \]

  • Mixing across demographic strata

\(M\): mixing matrix \[ M = (m_{ij}), \qquad \sum_{j \in \mathcal{J}} m_{ij} = 1 \ \forall i, \]

\[ \mathrm{MP}_{t,\text{eff}}^{(j)} = \sum_{i \in \mathcal{J}} m_{ij}\,\mathrm{MP}_t^{(i)}, \quad S_{t,\text{eff}}^{(j)} = \sum_{i \in \mathcal{J}} m_{ij}\,S_t^{(i)}, \quad I_{t,\text{eff}}^{(j)} = \sum_{i \in \mathcal{J}} m_{ij}\,I_t^{(i)}. \]

Mixing and force of infection

  • Force of infection (Susceptible [S] vs Vaccinated [V])

\[ \lambda_{s,t}^{(j)} = \beta_s \frac{I_{t,\text{eff}}^{(j)}}{\mathrm{MP}_{t,\text{eff}}^{(j)}}, \qquad \lambda_{v,t}^{(j)} = \beta_v \frac{I_{t,\text{eff}}^{(j)}}{\mathrm{MP}_{t,\text{eff}}^{(j)}}. \]

  • Susceptible [S] → Exposed [E] transition in stratum (j)

Important

\[\text{probability of being infected:} \quad p_{\mathrm{SE}}^{(j)} = 1 - \exp\!\big(-\lambda_{s,t}^{(j)} \,\Delta t\big) \\ \text{New infections:} \quad \Delta E_t^{(j)} = p_{\mathrm{SE}}^{(j)}\,S_t^{(j)}\]

Age-stratified model – Illustration

Ingredients

Population initialization

  • Age-groups: 0-17, 18-64, 65+
  • Initial conditions

Vaccination

  • Daily vaccination counts

Mixing matrices

  • Time varying mixing

Age-stratified model – Illustration

Synthetic population

  • Person demographics and household composition are derived from multiple sources, including U.S. census data.

  • Places include schools, workplaces, households, nursing homes and hospitals.

  • Agent activity schedules are derived from the American Time Use Survey and the Panel Study of Income dynamics.

ChiSIM

Macal et al. (2018)

Age-stratified model – Illustration

Mobility –> Mixing

  • Contact network emerges from hour-by-hour co-location of agents

  • Aggregate

    • Count the total number of contacts that occur at each location between and within subpopulations
    • Normalize the counts to arrive at per-capita value

ChiSIM

Macal et al. (2018)

Daytime vs Nightime mixing

Daytime

  • Location based mixing

Nighttime

  • Household and community mixing

MetaRVM in action

Prepare configuration

run_id: age-stratified
population_data:
  mapping: demographic_mapping.csv
  initialization: population_init.csv
  vaccination: vaccination.csv
mixing_matrix:
  weekday_day: m_wd_d.csv
  weekday_night: m_wd_n.csv
  weekend_day: m_we_d.csv
  weekend_night: m_we_n.csv
disease_params:
  ts: 0.5
  tv: 0.3
  ve : 0.5
  dv: 158
  dp: 1
  de: 3
  da: 5
  ds: 6
  dh: 4
  dr: 187
  pea: 0.333
  psr: 0.95
  phr: 0.97
sub_disease_params:
    age:
      0-17:
        ts: 0.5
        tv: 0.1
        pea: 0.1
        psr: 0.99
      18-64:
        ts: 0.5
        tv: 4
        pea: 0.1
        psr: 0.99
      65+:
        ts: 0.5
        tv: 7
        pea: 0.3
        psr: 0.97
simulation_config:
  start_date: 8/01/2023 # m/d/Y
  length: 365

MetaRVM in action

Run simulation

library(MetaRVM)
options(odin.verbose = FALSE)
out <- metaRVM("R/config.yaml")
print(out)
MetaRVM Results Object
=====================
Instances: 1 
Populations: 3 
Date range: 2023-08-01 to 2024-07-30 
Total observations: 33945 
Disease states: D, E, H, I_all, I_asymp, I_eff, I_presymp, I_symp, P, R, S, V, cum_V, mob_pop, n_EI, n_EIpresymp, n_HD, n_HR, n_HRD, n_IasympR, n_IsympH, n_IsympR, n_IsympRH, n_SE, n_SV, n_VE, n_VS, n_preIsymp, p_HRD, p_SE, p_VE 
out$results
             date    age   race   zone disease_state        value instance
           <Date> <char> <char> <char>        <char>        <num>    <int>
    1: 2023-08-01   0-17    all    all             D 2.191379e-05        1
    2: 2023-08-01   0-17    all    all             E 2.434292e-01        1
    3: 2023-08-01   0-17    all    all             H 1.344297e-02        1
    4: 2023-08-01   0-17    all    all         I_all 7.420794e-01        1
    5: 2023-08-01   0-17    all    all       I_asymp 2.299324e-02        1
   ---                                                                    
33941: 2024-07-30    65+    all    all          n_VS 5.717389e+01        1
33942: 2024-07-30    65+    all    all    n_preIsymp 2.301472e+01        1
33943: 2024-07-30    65+    all    all         p_HRD 9.516258e-02        1
33944: 2024-07-30    65+    all    all          p_SE 9.283081e-04        1
33945: 2024-07-30    65+    all    all          p_VE 3.714267e-04        1

MetaRVM in action

Visualize

# extract new hospitalizations
out_H <- out$subset_data(disease_states = "n_IsympH")

library(ggplot2)
ggplot(out_H$results, aes(x = date, y = value, color = age)) + 
  geom_line() + theme_bw()

MetaRVM in action

Use of checkpoints

Tip

simulation_config:
  start_date: 8/01/2023 # m/d/Y
  length: 60
  checkpoint_dir: "path-to-the-checkpoint-directory"
  restore_from: "path-to-checkpoint-file"

Run a simulation and checkpoint

out <- metaRVM(checkpoint_config)
print(out)
MetaRVM Results Object
=====================
Instances: 1 
Populations: 3 
Date range: 2023-08-01 to 2024-01-27 
Total observations: 16740 
Disease states: D, E, H, I_all, I_asymp, I_eff, I_presymp, I_symp, P, R, S, V, cum_V, mob_pop, n_EI, n_EIpresymp, n_HD, n_HR, n_HRD, n_IasympR, n_IsympH, n_IsympR, n_IsympRH, n_SE, n_SV, n_VE, n_VS, n_preIsymp, p_HRD, p_SE, p_VE 
# Check what checkpoint files were created
checkpoint_files <- list.files(checkpoint_dir, 
                               pattern = "^chk_.*\\.Rda$",
                               full.names = FALSE)
checkpoint_files
[1] "chk_2024-01-27_1.Rda"

MetaRVM in action

Use of checkpoints

Tip

simulation_config:
  start_date: 8/01/2023 # m/d/Y
  length: 60
  checkpoint_dir: "path-to-the-checkpoint-directory"
  restore_from: "path-to-checkpoint-file"

Restore from a checkpoint

out <- metaRVM(config_resume)
print(out)
MetaRVM Results Object
=====================
Instances: 1 
Populations: 3 
Date range: 2024-01-28 to 2024-07-25 
Total observations: 16740 
Disease states: D, E, H, I_all, I_asymp, I_eff, I_presymp, I_symp, P, R, S, V, cum_V, mob_pop, n_EI, n_EIpresymp, n_HD, n_HR, n_HRD, n_IasympR, n_IsympH, n_IsympR, n_IsympRH, n_SE, n_SV, n_VE, n_VS, n_preIsymp, p_HRD, p_SE, p_VE 

MetaRVM in action

Use of checkpoints

MetaRVM in action

Use of checkpoints

Tracking age-stratified influenza hospitalizations

  • Goal:
    • Calibrate MetaRVM to weekly hospitalizations
    • Parameters to estimate:
      • \(ts\): transmissibility for susceptible population
      • \(tv\): transmissibility for vaccinated population
      • \(pea\): proportion of asymptomatic cases
      • \(psh\): proportion of hospitalized among symptomatic cases
  • Approach:
    • Apply Bayesian Optimization to find relevant trajectories matching the observed data (Fadikar et al. (2023))

Tracking age-stratified influenza hospitalizations

Tracking age-stratified influenza hospitalizations

Week 1 - 10
Week 11 - 20
Week 21 - 30

Summary

  • MetaRVM provides a use-inspired metapopulation modeling framework for:
    • Detailed, stratified tracking of health outcomes
    • Infectious disease spread across multiple interacting subpopulations
  • Key contributions:
    • Uses synthetic population-derived mixing matrices
    • Balances realism with computational efficiency
    • Delivered as an open-source R package with a Shiny front end
  • Case study:
    • Demonstrated on influenza-related hospitalizations in Chicago
    • Supports prospective surveillance and scenario analysis

Current and Future Work

  • Extend MetaRVM to other respiratory diseases of public health concern (COVID, RSV) and additional demographic characteristics (geographic, race/ethnicity)
  • Apply checkpoint-aware Bayesian optimization
  • Utilize moving windows for improved trend detection
  • Expand nowcasting capabilities to forecasting and scenario analyses

Funding acknowledgments

  • Chicago Department of Public Health

References

Fadikar, Arindam, Nicholson Collier, Abby Stevens, Jonathan Ozik, Mickaël Binois, and Kok Ben Toh. 2023. “Trajectory-Oriented Optimization of Stochastic Epidemiological Models.” In 2023 Winter Simulation Conference (WSC), 1244–55. https://doi.org/10.1109/WSC60868.2023.10408258.
Macal, Charles M, Nicholson T Collier, Jonathan Ozik, Eric R Tatara, and John T Murphy. 2018. “Chisim: An Agent-Based Simulation Model of Social Interactions in a Large Urban Area.” In 2018 Winter Simulation Conference (WSC), 810–20. IEEE.